home *** CD-ROM | disk | FTP | other *** search
/ The Utilities Experience / The Utilities Experience - Volume 1.iso / software / programmers / misc / guicreator / demos / calculator.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-06-20  |  28.7 KB  |  490 lines

  1. /*************************************************************************/
  2. /*                                                                       */
  3. /*   Includes                                                            */
  4. /*                                                                       */
  5. /*************************************************************************/
  6.  
  7. #include "Calculator_Includes.h"
  8. #include "Calculator.h"
  9.  
  10. /*************************************************************************/
  11. /*                                                                       */
  12. /*   Variables and Structures                                            */
  13. /*                                                                       */
  14. /*************************************************************************/
  15.  
  16. extern struct IntuitionBase   *IntuitionBase;
  17. extern struct GfxBase         *GfxBase;
  18.  
  19. extern struct Library *GadToolsBase ;
  20. extern struct Library *AslBase      ;
  21. extern struct Library *DataTypesBase;
  22.  
  23. /*************************************************************************/
  24. /*                                                                       */
  25. /*   Defines                                                             */
  26. /*                                                                       */
  27. /*************************************************************************/
  28.  
  29. #define RASTERX (GfxBase->DefaultFont->tf_XSize)
  30. #define RASTERY (GfxBase->DefaultFont->tf_YSize/2+4)
  31.  
  32. #define XSIZE(x)  ((x)*RASTERX)
  33. #define YSIZE(x)  ((x)*RASTERY)
  34.  
  35. #define XPOS(x)   (XSIZE(x)+customscreen->WBorLeft)
  36. #define YPOS(x)   (YSIZE(x)+customscreen->BarHeight+1)
  37.  
  38. #define ERROR_NO_WINDOW_OPENED      1001L
  39. #define ERROR_NO_PUBSCREEN_LOCKED   1002L
  40. #define ERROR_NO_GADGETS_CREATED    1003L
  41. #define ERROR_NO_VISUALINFO         1004L
  42. #define ERROR_NO_PICTURE_LOADED     1005L
  43. #define ERROR_NO_GADGETLIST_CREATED 1006L
  44. #define ERROR_NO_WINDOW_MENU        1007L
  45.  
  46.  
  47. struct CalculatorWindowData
  48.    {
  49.    BOOL    gd_Disabled_Gadget1;
  50.    BOOL    gd_Disabled_Gadget2;
  51.    BOOL    gd_Disabled_Gadget3;
  52.    BOOL    gd_Disabled_Gadget4;
  53.    BOOL    gd_Disabled_Gadget5;
  54.    BOOL    gd_Disabled_Gadget6;
  55.    BOOL    gd_Disabled_Gadget7;
  56.    BOOL    gd_Disabled_Gadget8;
  57.    BOOL    gd_Disabled_Gadget9;
  58.    BOOL    gd_Disabled_Gadget10;
  59.    BOOL    gd_Disabled_Gadget11;
  60.    BOOL    gd_Disabled_Gadget12;
  61.    BOOL    gd_Disabled_Gadget13;
  62.    BOOL    gd_Disabled_Gadget14;
  63.    BOOL    gd_Disabled_Gadget15;
  64.    BOOL    gd_Disabled_Gadget16;
  65.    BOOL    gd_Disabled_Gadget17;
  66.    BOOL    gd_Disabled_Gadget18;
  67.    BOOL    gd_Disabled_Gadget19;
  68.    BOOL    gd_Disabled_Gadget20;
  69.    BOOL    gd_Disabled_Gadget21;
  70.    LONG    gd_Number_Gadget21;
  71.    };
  72.  
  73. /*************************************************************************/
  74. /*                                                                       */
  75. /*   Routines to handle gadgets                                          */
  76. /*                                                                       */
  77. /*************************************************************************/
  78.  
  79.  
  80. void HandleGadgetsCalculatorWindow(struct Window *win,struct Gadget *wingads[],ULONG gadgetid,ULONG messagecode,struct CalculatorWindowData *gadgetdata,APTR userdata)
  81. {
  82.    switch(gadgetid)
  83.       {
  84.       case BTID_Gadget1:
  85.          Gadget1Clicked(win,wingads,gadgetid,messagecode,userdata);
  86.          break;
  87.       case BTID_Gadget2:
  88.          Gadget2Clicked(win,wingads,gadgetid,messagecode,userdata);
  89.          break;
  90.       case BTID_Gadget3:
  91.          Gadget3Clicked(win,wingads,gadgetid,messagecode,userdata);
  92.          break;
  93.       case BTID_Gadget4:
  94.          Gadget4Clicked(win,wingads,gadgetid,messagecode,userdata);
  95.          break;
  96.       case BTID_Gadget5:
  97.          Gadget5Clicked(win,wingads,gadgetid,messagecode,userdata);
  98.          break;
  99.       case BTID_Gadget6:
  100.          Gadget6Clicked(win,wingads,gadgetid,messagecode,userdata);
  101.          break;
  102.       case BTID_Gadget7:
  103.          Gadget7Clicked(win,wingads,gadgetid,messagecode,userdata);
  104.          break;
  105.       case BTID_Gadget8:
  106.          Gadget8Clicked(win,wingads,gadgetid,messagecode,userdata);
  107.          break;
  108.       case BTID_Gadget9:
  109.          Gadget9Clicked(win,wingads,gadgetid,messagecode,userdata);
  110.          break;
  111.       case BTID_Gadget10:
  112.          Gadget10Clicked(win,wingads,gadgetid,messagecode,userdata);
  113.          break;
  114.       case BTID_Gadget11:
  115.          Gadget11Clicked(win,wingads,gadgetid,messagecode,userdata);
  116.          break;
  117.       case BTID_Gadget12:
  118.          Gadget12Clicked(win,wingads,gadgetid,messagecode,userdata);
  119.          break;
  120.       case BTID_Gadget13:
  121.          Gadget13Clicked(win,wingads,gadgetid,messagecode,userdata);
  122.          break;
  123.       case BTID_Gadget14:
  124.          Gadget14Clicked(win,wingads,gadgetid,messagecode,userdata);
  125.          break;
  126.       case BTID_Gadget15:
  127.          Gadget15Clicked(win,wingads,gadgetid,messagecode,userdata);
  128.          break;
  129.       case BTID_Gadget16:
  130.          Gadget16Clicked(win,wingads,gadgetid,messagecode,userdata);
  131.          break;
  132.       case BTID_Gadget17:
  133.          break;
  134.       case BTID_Gadget18:
  135.          Gadget18Clicked(win,wingads,gadgetid,messagecode,userdata);
  136.          break;
  137.       case BTID_Gadget19:
  138.          Gadget19Clicked(win,wingads,gadgetid,messagecode,userdata);
  139.          break;
  140.       case BTID_Gadget20:
  141.          Gadget20Clicked(win,wingads,gadgetid,messagecode,userdata);
  142.          break;
  143.       case NBID_Gadget21:
  144.          Gadget21Clicked(win,wingads,gadgetid,messagecode,userdata);
  145.          break;
  146.       };
  147. }
  148.  
  149.  
  150. /*************************************************************************/
  151. /*                                                                       */
  152. /*   Routines to create gadgets                                          */
  153. /*                                                                       */
  154. /*************************************************************************/
  155.  
  156.  
  157. struct Gadget *CreateGadgetsCalculatorWindow(struct Gadget **gadgetlist,struct NewGadget newgad[],struct Gadget *wingads[],struct CalculatorWindowData *gadgetdata)
  158. {
  159.    struct Gadget *gadget=CreateContext(gadgetlist);
  160.    if (gadget)
  161.       {
  162.       wingads[BTID_Gadget1]=gadget=CreateGadget(BUTTON_KIND,gadget,&newgad[BTID_Gadget1],GA_Disabled,gadgetdata->gd_Disabled_Gadget1,GT_Underscore,'_',TAG_END);
  163.       wingads[BTID_Gadget2]=gadget=CreateGadget(BUTTON_KIND,gadget,&newgad[BTID_Gadget2],GA_Disabled,gadgetdata->gd_Disabled_Gadget2,GT_Underscore,'_',TAG_END);
  164.       wingads[BTID_Gadget3]=gadget=CreateGadget(BUTTON_KIND,gadget,&newgad[BTID_Gadget3],GA_Disabled,gadgetdata->gd_Disabled_Gadget3,GT_Underscore,'_',TAG_END);
  165.       wingads[BTID_Gadget4]=gadget=CreateGadget(BUTTON_KIND,gadget,&newgad[BTID_Gadget4],GA_Disabled,gadgetdata->gd_Disabled_Gadget4,GT_Underscore,'_',TAG_END);
  166.       wingads[BTID_Gadget5]=gadget=CreateGadget(BUTTON_KIND,gadget,&newgad[BTID_Gadget5],GA_Disabled,gadgetdata->gd_Disabled_Gadget5,GT_Underscore,'_',TAG_END);
  167.       wingads[BTID_Gadget6]=gadget=CreateGadget(BUTTON_KIND,gadget,&newgad[BTID_Gadget6],GA_Disabled,gadgetdata->gd_Disabled_Gadget6,GT_Underscore,'_',TAG_END);
  168.       wingads[BTID_Gadget7]=gadget=CreateGadget(BUTTON_KIND,gadget,&newgad[BTID_Gadget7],GA_Disabled,gadgetdata->gd_Disabled_Gadget7,GT_Underscore,'_',TAG_END);
  169.       wingads[BTID_Gadget8]=gadget=CreateGadget(BUTTON_KIND,gadget,&newgad[BTID_Gadget8],GA_Disabled,gadgetdata->gd_Disabled_Gadget8,GT_Underscore,'_',TAG_END);
  170.       wingads[BTID_Gadget9]=gadget=CreateGadget(BUTTON_KIND,gadget,&newgad[BTID_Gadget9],GA_Disabled,gadgetdata->gd_Disabled_Gadget9,GT_Underscore,'_',TAG_END);
  171.       wingads[BTID_Gadget10]=gadget=CreateGadget(BUTTON_KIND,gadget,&newgad[BTID_Gadget10],GA_Disabled,gadgetdata->gd_Disabled_Gadget10,GT_Underscore,'_',TAG_END);
  172.       wingads[BTID_Gadget11]=gadget=CreateGadget(BUTTON_KIND,gadget,&newgad[BTID_Gadget11],GA_Disabled,gadgetdata->gd_Disabled_Gadget11,GT_Underscore,'_',TAG_END);
  173.       wingads[BTID_Gadget12]=gadget=CreateGadget(BUTTON_KIND,gadget,&newgad[BTID_Gadget12],GA_Disabled,gadgetdata->gd_Disabled_Gadget12,GT_Underscore,'_',TAG_END);
  174.       wingads[BTID_Gadget13]=gadget=CreateGadget(BUTTON_KIND,gadget,&newgad[BTID_Gadget13],GA_Disabled,gadgetdata->gd_Disabled_Gadget13,GT_Underscore,'_',TAG_END);
  175.       wingads[BTID_Gadget14]=gadget=CreateGadget(BUTTON_KIND,gadget,&newgad[BTID_Gadget14],GA_Disabled,gadgetdata->gd_Disabled_Gadget14,GT_Underscore,'_',TAG_END);
  176.       wingads[BTID_Gadget15]=gadget=CreateGadget(BUTTON_KIND,gadget,&newgad[BTID_Gadget15],GA_Disabled,gadgetdata->gd_Disabled_Gadget15,GT_Underscore,'_',TAG_END);
  177.       wingads[BTID_Gadget16]=gadget=CreateGadget(BUTTON_KIND,gadget,&newgad[BTID_Gadget16],GA_Disabled,gadgetdata->gd_Disabled_Gadget16,GT_Underscore,'_',TAG_END);
  178.       wingads[BTID_Gadget17]=gadget=CreateGadget(BUTTON_KIND,gadget,&newgad[BTID_Gadget17],GA_Disabled,gadgetdata->gd_Disabled_Gadget17,GT_Underscore,'_',TAG_END);
  179.       wingads[BTID_Gadget18]=gadget=CreateGadget(BUTTON_KIND,gadget,&newgad[BTID_Gadget18],GA_Disabled,gadgetdata->gd_Disabled_Gadget18,GT_Underscore,'_',TAG_END);
  180.       wingads[BTID_Gadget19]=gadget=CreateGadget(BUTTON_KIND,gadget,&newgad[BTID_Gadget19],GA_Disabled,gadgetdata->gd_Disabled_Gadget19,GT_Underscore,'_',TAG_END);
  181.       wingads[BTID_Gadget20]=gadget=CreateGadget(BUTTON_KIND,gadget,&newgad[BTID_Gadget20],GA_Disabled,gadgetdata->gd_Disabled_Gadget20,GT_Underscore,'_',TAG_END);
  182.       wingads[NBID_Gadget21]=gadget=CreateGadget(NUMBER_KIND,gadget,&newgad[NBID_Gadget21],GA_Disabled,gadgetdata->gd_Disabled_Gadget21,GTNM_Number,gadgetdata->gd_Number_Gadget21,GTNM_Border,TRUE,GTNM_Justification,GTJ_RIGHT,TAG_END);
  183.       return gadget;
  184.       }
  185.    else return NULL;
  186. }
  187.  
  188.  
  189. /*************************************************************************/
  190. /*                                                                       */
  191. /*   Routines to handle windows                                          */
  192. /*                                                                       */
  193. /*************************************************************************/
  194.  
  195.  
  196. void HandleCalculatorWindow(struct Screen *customscreen,LONG left,LONG top,APTR userdata)
  197. {
  198.    APTR visualinfo=GetVisualInfo(customscreen,TAG_DONE);
  199.    if (visualinfo)
  200.       {
  201.       struct Gadget  *gadgetlist = NULL;
  202.       struct Menu    *menustrip  = NULL;
  203.       ULONG height=16,width=26,maxheight=1024,maxwidth=1280;
  204.  
  205.       struct Gadget *wingads[21];
  206.  
  207.       STRPTR title                  = "Calculator";
  208.       struct Window     *win        = NULL;
  209.  
  210.       struct TextAttr   textattr    = { GfxBase->DefaultFont->tf_Message.mn_Node.ln_Name,GfxBase->DefaultFont->tf_YSize,FS_NORMAL,FPF_DISKFONT };
  211.  
  212.       struct NewGadget  newgad[]    = {
  213.                                         XPOS(1),YPOS(4),XSIZE(4),YSIZE(2),"7",&textattr,BTID_Gadget1,PLACETEXT_IN,visualinfo,NULL,
  214.                                         XPOS(6),YPOS(4),XSIZE(4),YSIZE(2),"8",&textattr,BTID_Gadget2,PLACETEXT_IN,visualinfo,NULL,
  215.                                         XPOS(11),YPOS(4),XSIZE(4),YSIZE(2),"9",&textattr,BTID_Gadget3,PLACETEXT_IN,visualinfo,NULL,
  216.                                         XPOS(1),YPOS(7),XSIZE(4),YSIZE(2),"4",&textattr,BTID_Gadget4,PLACETEXT_IN,visualinfo,NULL,
  217.                                         XPOS(6),YPOS(7),XSIZE(4),YSIZE(2),"5",&textattr,BTID_Gadget5,PLACETEXT_IN,visualinfo,NULL,
  218.                                         XPOS(11),YPOS(7),XSIZE(4),YSIZE(2),"6",&textattr,BTID_Gadget6,PLACETEXT_IN,visualinfo,NULL,
  219.                                         XPOS(1),YPOS(10),XSIZE(4),YSIZE(2),"1",&textattr,BTID_Gadget7,PLACETEXT_IN,visualinfo,NULL,
  220.                                         XPOS(6),YPOS(10),XSIZE(4),YSIZE(2),"2",&textattr,BTID_Gadget8,PLACETEXT_IN,visualinfo,NULL,
  221.                                         XPOS(11),YPOS(10),XSIZE(4),YSIZE(2),"3",&textattr,BTID_Gadget9,PLACETEXT_IN,visualinfo,NULL,
  222.                                         XPOS(16),YPOS(4),XSIZE(4),YSIZE(2),"CA",&textattr,BTID_Gadget10,PLACETEXT_IN,visualinfo,NULL,
  223.                                         XPOS(21),YPOS(4),XSIZE(4),YSIZE(2),"CE",&textattr,BTID_Gadget11,PLACETEXT_IN,visualinfo,NULL,
  224.                                         XPOS(16),YPOS(7),XSIZE(4),YSIZE(2),"·",&textattr,BTID_Gadget12,PLACETEXT_IN,visualinfo,NULL,
  225.                                         XPOS(21),YPOS(7),XSIZE(4),YSIZE(2),":",&textattr,BTID_Gadget13,PLACETEXT_IN,visualinfo,NULL,
  226.                                         XPOS(16),YPOS(10),XSIZE(4),YSIZE(2),"+",&textattr,BTID_Gadget14,PLACETEXT_IN,visualinfo,NULL,
  227.                                         XPOS(21),YPOS(10),XSIZE(4),YSIZE(2),"-",&textattr,BTID_Gadget15,PLACETEXT_IN,visualinfo,NULL,
  228.                                         XPOS(1),YPOS(13),XSIZE(4),YSIZE(2),"0",&textattr,BTID_Gadget16,PLACETEXT_IN,visualinfo,NULL,
  229.                                         XPOS(6),YPOS(13),XSIZE(4),YSIZE(2),"",&textattr,BTID_Gadget17,PLACETEXT_IN,visualinfo,NULL,
  230.                                         XPOS(11),YPOS(13),XSIZE(4),YSIZE(2),"«",&textattr,BTID_Gadget18,PLACETEXT_IN,visualinfo,NULL,
  231.                                         XPOS(16),YPOS(13),XSIZE(4),YSIZE(2),"±",&textattr,BTID_Gadget19,PLACETEXT_IN,visualinfo,NULL,
  232.                                         XPOS(21),YPOS(13),XSIZE(4),YSIZE(2),"=",&textattr,BTID_Gadget20,PLACETEXT_IN,visualinfo,NULL,
  233.                                         XPOS(1),YPOS(1),XSIZE(24),YSIZE(2),NULL,&textattr,NBID_Gadget21,PLACETEXT_LEFT,visualinfo,NULL,
  234.                                       };
  235.  
  236.  
  237.       struct CalculatorWindowData gadgetdata = {
  238.                                         /* belongs to a button */
  239.                                         FALSE,
  240.                                         /* belongs to a button */
  241.                                         FALSE,
  242.                                         /* belongs to a button */
  243.                                         FALSE,
  244.                                         /* belongs to a button */
  245.                                         FALSE,
  246.                                         /* belongs to a button */
  247.                                         FALSE,
  248.                                         /* belongs to a button */
  249.                                         FALSE,
  250.                                         /* belongs to a button */
  251.                                         FALSE,
  252.                                         /* belongs to a button */
  253.                                         FALSE,
  254.                                         /* belongs to a button */
  255.                                         FALSE,
  256.                                         /* belongs to a button */
  257.                                         FALSE,
  258.                                         /* belongs to a button */
  259.                                         FALSE,
  260.                                         /* belongs to a button */
  261.                                         FALSE,
  262.                                         /* belongs to a button */
  263.                                         FALSE,
  264.                                         /* belongs to a button */
  265.                                         FALSE,
  266.                                         /* belongs to a button */
  267.                                         FALSE,
  268.                                         /* belongs to a button */
  269.                                         FALSE,
  270.                                         /* belongs to a button */
  271.                                         FALSE,
  272.                                         /* belongs to a button */
  273.                                         FALSE,
  274.                                         /* belongs to a button */
  275.                                         FALSE,
  276.                                         /* belongs to a button */
  277.                                         FALSE,
  278.                                         /* belongs to a number gadget */
  279.                                         FALSE,
  280.                                         0,
  281.                                       };
  282.  
  283.  
  284.       struct NewMenu    menu[]      = { NM_TITLE, "Program"    , 0 ,0,0,0,
  285.                                         NM_ITEM , "About"      ,"A",0,0,0,
  286.                                         NM_END  , NULL         , 0 ,0,0,0 };
  287.  
  288.       height= YSIZE(height);
  289.       width = XSIZE(width) ;
  290.       if (left==-1) left  = (customscreen->Width-width)/2;
  291.       if (top ==-1) top   = (customscreen->Height-height)/2;
  292.  
  293.       if (CreateGadgetsCalculatorWindow(&gadgetlist,newgad,wingads,&gadgetdata)!=NULL)
  294.          {
  295.          if (height>customscreen->Height || width>customscreen->Width) GUICreatorErrorReport(NULL,ERROR_SCREEN_TOO_SMALL);
  296.          win=OpenWindowTags(NULL,WA_Activate,         TRUE,
  297.                                  WA_CloseGadget,      TRUE,
  298.                                  WA_DepthGadget,      TRUE,
  299.                                  WA_SizeGadget,       TRUE,
  300.                                  WA_DragBar,          TRUE,
  301.                                  WA_Gadgets,          gadgetlist,
  302.                                  WA_InnerHeight,      height,
  303.                                  WA_InnerWidth,       width,
  304.                                  WA_IDCMP,            IDCMP_CLOSEWINDOW|IDCMP_MENUPICK|IDCMP_NEWSIZE|IDCMP_VANILLAKEY|IDCMP_REFRESHWINDOW|IDCMP_GADGETUP|BUTTONIDCMP,
  305.                                  WA_Left,             left,
  306.                                  WA_Top,              top,
  307.                                  WA_MaxHeight,        maxheight,
  308.                                  WA_MinHeight,        height,
  309.                                  WA_MaxWidth,         maxwidth,
  310.                                  WA_MinWidth,         width,
  311.                                  WA_SizeBRight,       FALSE,
  312.                                  WA_SizeBBottom,      TRUE,
  313.                                  WA_SmartRefresh,     TRUE,
  314.                                  WA_CustomScreen,     customscreen,
  315.                                  WA_Title,            title,
  316.                                  WA_NewLookMenus,     TRUE,
  317.                                  TAG_END);
  318.          if (win)
  319.             {
  320.             menustrip=CreateMenus(menu,GTMN_NewLookMenus,TRUE,TAG_END);
  321.             if (menustrip)
  322.                {
  323.                if (LayoutMenus(menustrip,visualinfo,GTMN_NewLookMenus,TRUE,TAG_END))
  324.                   {
  325.                   if (SetMenuStrip(win,menustrip))
  326.                      {
  327.                      struct IntuiMessage  *imessage   = NULL;
  328.                      struct Gadget        *idcmpgad   = NULL;
  329.                      struct NewGadget     ngcopy[]    = newgad;
  330.                      long   double        xscale      = 1.0;
  331.                      long   double        yscale      = 1.0;
  332.                      STRPTR stringpointer             = NULL;
  333.                      ULONG                i           = 0;
  334.                      ULONG                gadgetcount = 21;
  335.                      ULONG  idcmpclass                = 0;
  336.                      UWORD  messagecode               = 0;
  337.                      BOOL   running                   = TRUE;
  338.                      ULONG  signal                    = 0;
  339.                      ULONG  longpointer1              = 0;
  340.                      ULONG  longpointer2              = 0;
  341.  
  342.                      SetFont(win->RPort,GfxBase->DefaultFont);
  343.  
  344.                      GT_RefreshWindow(win,NULL);
  345.  
  346.                      do
  347.                         {
  348.                         WindowLimits(win,width+win->BorderLeft+win->BorderRight,height+win->BorderTop+win->BorderBottom,maxwidth,maxheight);
  349.                         if (running) signal=Wait(SIGBREAKF_CTRL_C | 1L << win->UserPort->mp_SigBit);
  350.                         if (signal & SIGBREAKF_CTRL_C) running=FALSE;
  351.                         WindowLimits(win,win->Width,win->Height,win->Width,win->Height);
  352.                         while (running && (imessage=GT_GetIMsg(win->UserPort)))
  353.                            {
  354.                            idcmpgad=(struct Gadget *)imessage->IAddress;
  355.                            idcmpclass=imessage->Class;
  356.                            messagecode =imessage->Code;
  357.  
  358.                            GT_ReplyIMsg(imessage);
  359.  
  360.                            switch(idcmpclass)
  361.                               {
  362.                               case IDCMP_REFRESHWINDOW:
  363.                                    GT_BeginRefresh(win);
  364.                                    GT_EndRefresh(win,TRUE);
  365.                                    break;
  366.                               case IDCMP_MENUPICK:
  367.                                    switch(MENUNUM(messagecode))
  368.                                       {
  369.                                       case 0:
  370.                                          switch (ITEMNUM(messagecode))
  371.                                             {
  372.                                             case 0:
  373.                                                About(win);
  374.                                                break;
  375.                                             }
  376.                                          /* end-switch */
  377.                                          break;
  378.                                       }
  379.                                    /* end-switch */
  380.                                    break;
  381.                               case IDCMP_NEWSIZE:
  382.                                    GT_GetGadgetAttrs(wingads[BTID_Gadget1],win,NULL,GA_Disabled,&longpointer1,TAG_END);
  383.                                    gadgetdata.gd_Disabled_Gadget1=(longpointer1==0)?FALSE:TRUE;
  384.                                    GT_GetGadgetAttrs(wingads[BTID_Gadget2],win,NULL,GA_Disabled,&longpointer1,TAG_END);
  385.                                    gadgetdata.gd_Disabled_Gadget2=(longpointer1==0)?FALSE:TRUE;
  386.                                    GT_GetGadgetAttrs(wingads[BTID_Gadget3],win,NULL,GA_Disabled,&longpointer1,TAG_END);
  387.                                    gadgetdata.gd_Disabled_Gadget3=(longpointer1==0)?FALSE:TRUE;
  388.                                    GT_GetGadgetAttrs(wingads[BTID_Gadget4],win,NULL,GA_Disabled,&longpointer1,TAG_END);
  389.                                    gadgetdata.gd_Disabled_Gadget4=(longpointer1==0)?FALSE:TRUE;
  390.                                    GT_GetGadgetAttrs(wingads[BTID_Gadget5],win,NULL,GA_Disabled,&longpointer1,TAG_END);
  391.                                    gadgetdata.gd_Disabled_Gadget5=(longpointer1==0)?FALSE:TRUE;
  392.                                    GT_GetGadgetAttrs(wingads[BTID_Gadget6],win,NULL,GA_Disabled,&longpointer1,TAG_END);
  393.                                    gadgetdata.gd_Disabled_Gadget6=(longpointer1==0)?FALSE:TRUE;
  394.                                    GT_GetGadgetAttrs(wingads[BTID_Gadget7],win,NULL,GA_Disabled,&longpointer1,TAG_END);
  395.                                    gadgetdata.gd_Disabled_Gadget7=(longpointer1==0)?FALSE:TRUE;
  396.                                    GT_GetGadgetAttrs(wingads[BTID_Gadget8],win,NULL,GA_Disabled,&longpointer1,TAG_END);
  397.                                    gadgetdata.gd_Disabled_Gadget8=(longpointer1==0)?FALSE:TRUE;
  398.                                    GT_GetGadgetAttrs(wingads[BTID_Gadget9],win,NULL,GA_Disabled,&longpointer1,TAG_END);
  399.                                    gadgetdata.gd_Disabled_Gadget9=(longpointer1==0)?FALSE:TRUE;
  400.                                    GT_GetGadgetAttrs(wingads[BTID_Gadget10],win,NULL,GA_Disabled,&longpointer1,TAG_END);
  401.                                    gadgetdata.gd_Disabled_Gadget10=(longpointer1==0)?FALSE:TRUE;
  402.                                    GT_GetGadgetAttrs(wingads[BTID_Gadget11],win,NULL,GA_Disabled,&longpointer1,TAG_END);
  403.                                    gadgetdata.gd_Disabled_Gadget11=(longpointer1==0)?FALSE:TRUE;
  404.                                    GT_GetGadgetAttrs(wingads[BTID_Gadget12],win,NULL,GA_Disabled,&longpointer1,TAG_END);
  405.                                    gadgetdata.gd_Disabled_Gadget12=(longpointer1==0)?FALSE:TRUE;
  406.                                    GT_GetGadgetAttrs(wingads[BTID_Gadget13],win,NULL,GA_Disabled,&longpointer1,TAG_END);
  407.                                    gadgetdata.gd_Disabled_Gadget13=(longpointer1==0)?FALSE:TRUE;
  408.                                    GT_GetGadgetAttrs(wingads[BTID_Gadget14],win,NULL,GA_Disabled,&longpointer1,TAG_END);
  409.                                    gadgetdata.gd_Disabled_Gadget14=(longpointer1==0)?FALSE:TRUE;
  410.                                    GT_GetGadgetAttrs(wingads[BTID_Gadget15],win,NULL,GA_Disabled,&longpointer1,TAG_END);
  411.                                    gadgetdata.gd_Disabled_Gadget15=(longpointer1==0)?FALSE:TRUE;
  412.                                    GT_GetGadgetAttrs(wingads[BTID_Gadget16],win,NULL,GA_Disabled,&longpointer1,TAG_END);
  413.                                    gadgetdata.gd_Disabled_Gadget16=(longpointer1==0)?FALSE:TRUE;
  414.                                    GT_GetGadgetAttrs(wingads[BTID_Gadget17],win,NULL,GA_Disabled,&longpointer1,TAG_END);
  415.                                    gadgetdata.gd_Disabled_Gadget17=(longpointer1==0)?FALSE:TRUE;
  416.                                    GT_GetGadgetAttrs(wingads[BTID_Gadget18],win,NULL,GA_Disabled,&longpointer1,TAG_END);
  417.                                    gadgetdata.gd_Disabled_Gadget18=(longpointer1==0)?FALSE:TRUE;
  418.                                    GT_GetGadgetAttrs(wingads[BTID_Gadget19],win,NULL,GA_Disabled,&longpointer1,TAG_END);
  419.                                    gadgetdata.gd_Disabled_Gadget19=(longpointer1==0)?FALSE:TRUE;
  420.                                    GT_GetGadgetAttrs(wingads[BTID_Gadget20],win,NULL,GA_Disabled,&longpointer1,TAG_END);
  421.                                    gadgetdata.gd_Disabled_Gadget20=(longpointer1==0)?FALSE:TRUE;
  422.                                    GT_GetGadgetAttrs(wingads[NBID_Gadget21],win,NULL,GA_Disabled,&longpointer1,GTNM_Number,&longpointer2,TAG_END);
  423.                                    gadgetdata.gd_Disabled_Gadget21=(longpointer1==0)?FALSE:TRUE;
  424.                                    gadgetdata.gd_Number_Gadget21=longpointer2;
  425.  
  426.                                    RemoveGList(win,gadgetlist,-1);
  427.                                    SetAPen(win->RPort,0L);
  428.                                    RectFill(win->RPort,win->BorderLeft,win->BorderTop,win->Width-win->BorderRight-1,win->Height-win->BorderBottom-1);
  429.                                    RefreshWindowFrame(win);
  430.  
  431.                                    xscale=(long double)win->Width /(long double)(width+win->BorderLeft+win->BorderRight);
  432.                                    yscale=(long double)win->Height/(long double)(height+win->BorderTop+win->BorderBottom);
  433.                                    for (i=0;i<gadgetcount;i++)
  434.                                       {
  435.                                       ngcopy[i].ng_LeftEdge=(WORD)((long double)newgad[i].ng_LeftEdge*xscale);
  436.                                       ngcopy[i].ng_TopEdge =(WORD)((long double)newgad[i].ng_TopEdge *yscale);
  437.                                       ngcopy[i].ng_Width   =(WORD)((long double)newgad[i].ng_Width   *xscale);
  438.                                       ngcopy[i].ng_Height  =(WORD)((long double)newgad[i].ng_Height  *yscale);
  439.                                       }
  440.  
  441.                                    FreeGadgets(gadgetlist);
  442.                                    gadgetlist=NULL;
  443.  
  444.                                    CreateGadgetsCalculatorWindow(&gadgetlist,ngcopy,wingads,&gadgetdata);
  445.                                    AddGList(win,gadgetlist,-1,-1,NULL);
  446.                                    RefreshGList(gadgetlist,win,NULL,-1);
  447.                                    GT_RefreshWindow(win,NULL);
  448.  
  449.                                    break;
  450.                               case IDCMP_VANILLAKEY:
  451.                                    switch(messagecode)
  452.                                       {
  453.                                       case 27:
  454.                                          running=FALSE;
  455.                                          break;
  456.                                       }
  457.                                    break;
  458.                               case IDCMP_CLOSEWINDOW:
  459.                                    running=FALSE;
  460.                                    break;
  461.                                 case IDCMP_GADGETUP:
  462.                                 case MXIDCMP:
  463.                                    HandleGadgetsCalculatorWindow(win,wingads,idcmpgad->GadgetID,messagecode,&gadgetdata,userdata);
  464.                                    break;
  465.                               }
  466.                            /* end-switch */
  467.                            }
  468.                         /* end-while */
  469.                         }
  470.                      while (running);
  471.                      ClearMenuStrip(win);
  472.                      }
  473.                   else GUICreatorErrorReport(win,ERROR_NO_WINDOW_MENU);
  474.                   }
  475.                else GUICreatorErrorReport(win,ERROR_NO_WINDOW_MENU);
  476.                FreeMenus(menustrip);
  477.                }
  478.             else GUICreatorErrorReport(win,ERROR_NO_WINDOW_MENU);
  479.             if (win) CloseWindow(win);
  480.             }
  481.          else GUICreatorErrorReport(win,ERROR_NO_WINDOW_OPENED);
  482.          if (gadgetlist) FreeGadgets(gadgetlist);
  483.          }
  484.       else GUICreatorErrorReport(NULL,ERROR_NO_GADGETS_CREATED);
  485.       if (visualinfo) FreeVisualInfo(visualinfo);
  486.       }
  487.    else GUICreatorErrorReport(NULL,ERROR_NO_VISUALINFO);
  488. }
  489.  
  490.